/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include "节点.h"




class C_输入组节点 : public C_节点基类 {
	uint32 m_固定插座数量;
public:
	C_输入组节点(S_设备环境& ctx, uint32 固定插座数量 = 1);
	~C_输入组节点();

	bool	f_update();
	//std::string	f_编译(C_节点基类* rn, std::string& 声明, std::vector<std::string>& 定义, std::string& 释放);

	int16		f_可添加删除插座起始位置(E_插座方向 方向) { return m_固定插座数量; }
	void		f_set可添加删除插座起始位置(uint32 num){ m_固定插座数量 = 1 + num; }
};

C_节点基类* f_node_创建输入组节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载输入组节点(S_设备环境& ctx, FILE* f);
void		f_node_保存输入组节点(C_节点基类* n, FILE* f);




class C_输出组节点 : public C_节点基类 {
	uint32 m_固定插座数量;
public:
	C_输出组节点(S_设备环境& ctx, uint32 固定插座数量 = 1);
	~C_输出组节点();

	C_节点基类* m_输入节点;

	bool	f_update();
	std::string	DEF_节点编译函数;

	int16		f_可添加删除插座起始位置(E_插座方向 方向) { return m_固定插座数量; }
};

C_节点基类* f_node_创建输出组节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载输出组节点(S_设备环境& ctx, FILE* f);
void		f_node_保存输出组节点(C_节点基类* n, FILE* f);




class C_插座转接节点 : public C_节点基类 {
	
public:
	C_插座转接节点(S_设备环境& ctx, uint32 固定插座数量 = 1);
	~C_插座转接节点();

	bool	f_update();
	std::string	DEF_节点编译函数;

};

C_节点基类* f_node_创建插座转接节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载插座转接节点(S_设备环境& ctx, FILE* f);
void		f_node_保存插座转接节点(C_节点基类* n, FILE* f);




class C_面板框节点 : public C_节点基类 {

public:
	C_面板框节点(S_设备环境& ctx);
	~C_面板框节点();

	bool	f_update();
	//std::string	DEF_节点编译函数;

	void	f_读取(FILE* f);
	void	f_写入(FILE* f);
};

C_节点基类* f_node_创建面板域节点(S_设备环境& ctx, C_节点树* 子节点树);
C_节点基类* f_node_加载面板域节点(S_设备环境& ctx, FILE* f);
void		f_node_保存面板域节点(C_节点基类* n, FILE* f);





